package com.acme.bankapp.domain.bank;

/**
 * @author Artem Kalchenko
 *
 */
public interface Account {
	/**
	 * Return account's balance
	 * @return balance
	 */
	double getBalance();

	/**
	 * Deposit money on the account
	 * @param sum
	 * @return new balance state
	 * @throws IllegalArgumentException TODO
	 */
	double deposit(double sum);

	/**
	 * Withdraw sum from the account
	 * @param sum
	 * @throws NotEnoughFundsException
	 */
	boolean withdraw(double sum);

	/**
	 * Return maximum amount a client can withdraw
	 * @return
	 */
	double maximumAmountToWithdraw();
}

